// public 修饰的属性或方法是公有的，可以在任何地方被访问到，默认所有的属性和方法都是 public 的
// private 修饰的属性或方法是私有的，不能在声明它的类的外部访问
// protected 修饰的属性或方法是受保护的，它和 private 类似，区别是它在子类中也是允许被访问的

class A1 {
  public name:string //公有属性
  private age:number //私有
  protected sex:string //保护
  constructor(name:string,age:number,sex:string) {
    this.name=name
    this.age=age
    this.sex=sex
  }
  public p(){
    console.log(this.name)
  }
  private x(){
    console.log('x')
  }
}

class A2 extends A1 {
 public y(){
    this.name
    // this.age //报错
    this.sex //不报错
    // super.x() //报错
  }
}

const a1=new A1('张三',18,'男')
// a1.age //报错
// a1.sex // 报错
a1.p() // 不报错

